<?php
/**
 * Application level Controller
 *
 * This file is application-wide controller file. You can put all
 * application-wide controller-related methods here.
 *
 * PHP 5
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       app.Controller
 * @since         CakePHP(tm) v 0.2.9
 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
 */

App::uses('Controller', 'Controller');
App::uses('Sanitize', 'Utility');
App::uses('CakeEmail', 'Network/Email');

/**
 * Application Controller
 *
 * Add your application-wide methods in the class below, your controllers
 * will inherit them.
 *
 * @package       app.Controller
 * @link http://book.cakephp.org/2.0/en/controllers.html#the-app-controller
 */
class AppController extends Controller {
	public $helpers = array(
		'Paginator' => array('className' => 'PaginatorCustom'),
		'Html', 'Form', 'Session', 'Js'
	);	
	
	public $components = array(
		'Session',  
		'RequestHandler',
		'Auth'
	);
	
	public $paginate = array('limit' => 10);
	
	public $activeUser = null; 
	
	public function beforeFilter() {
		parent::beforeFilter();
		
		$this->Auth->authenticate = array(
			'Form' => array(
				'userModel' => 'Usuario',
				'fields' => array('username' => 'login') 
			)
		);
		$this->Auth->authorize = array('Controller');
		$this->Auth->loginAction = array('controller' => 'usuarios', 'action' => 'login');
		$this->Auth->logoutRedirect = array('controller' => 'usuarios', 'action' => 'login');
		$this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'display', 'index');
		$this->Auth->authError = __('Você não tem permissão para executar esta ação.');
		$this->Auth->allow('login', 'logout', 'esqueci');
		
		$this->activeUser = $this->Auth->user();
		
		if (!empty($this->activeUser)) {
			$this->_setupMenu();
		}
	}
	
	public function isAuthorized()
	{
		if (empty($this->activeUser))
			return false;
		
		if (in_array($this->activeUser['perfil_id'], array(1,2,3)))
			return true;
		
		return true;
	}

	
	private function _setupMenu()
	{
		$menu = array();
		
		if ($this->activeUser['perfil_id'] === 1) // Administrador
		{
			$menu = array(
				__('Usuários') => array(
					'controller' => 'usuarios',
					'action' => 'index',
				),
				__('Categorias') => array(
					'controller' => 'categorias',
					'action' => 'index',
				),
				__('Projetos') => array(
					'controller' => 'projetos',
					'action' => 'index',
				),
				__('Localizações') => array(
					'controller' => 'localizacaos',
					'action' => 'index',
				),
				__('Aluno') => array(
					'controller' => 'alunos',
					'action' => 'index',
				),
				__('Equipamentos') => array(
					'controller' => 'equipamentos',
					'action' => 'index',
				),
				__('Empréstimos') => array(
					'controller' => 'emprestimos',
					'action' => 'index',
				),
				__('Relatórios') => array(
					'controller' => 'relatorios',
					'action' => 'index',
				),
				__('Minha conta') => array(
					'controller' => 'usuarios',
					'action' => 'profile',
				),
				__('Sair') => '/logout',
			);
		}
		else if ($this->activeUser['perfil_id'] === 2) // Professor
		{
			$menu = array(
				__('Categorias') => array(
					'controller' => 'categorias',
					'action' => 'index',
				),
				__('Projetos') => array(
					'controller' => 'projetos',
					'action' => 'index',
				),
				__('Localizações') => array(
					'controller' => 'localizacaos',
					'action' => 'index',
				),
				__('Alunos') => array(
					'controller' => 'alunos',
					'action' => 'index',
				),
				__('Equipamentos') => array(
					'controller' => 'equipamentos',
					'action' => 'index',
				),
				__('Empréstimos') => array(
					'controller' => 'emprestimos',
					'action' => 'index',
				),
				__('Relatórios') => array(
					'controller' => 'relatorios',
					'action' => 'index',
				),
				__('Minha conta') => array(
					'controller' => 'usuarios',
					'action' => 'profile',
				),
				__('Sair') => '/logout',
			);
		}
		else if ($this->activeUser['perfil_id'] === 3) // Secretaria 
		{ 
			$menu = array(
				__('Projetos') => array(
					'controller' => 'projetos',
					'action' => 'index',
				),
				__('Alunos') => array(
					'controller' => 'alunos',
					'action' => 'index',
				),
				__('Empréstimos') => array(
					'controller' => 'emprestimos',
					'action' => 'index',
				),
				__('Relatórios') => array(
					'controller' => 'relatorios',
					'action' => 'index',
				),
				__('Minha conta') => array(
					'controller' => 'usuarios',
					'action' => 'profile',
				),
				__('Sair') => '/logout',
			);
		}
		
		$this->set('menuItems', $menu);
	}
	
/**
 * Realiza o parse dos argumentos contidos na url para parâmetros nomeados.
 * Por exemplo: sigem.com.br/equipamentos/index/projeto_id:1/descricao:placa
 *
 * Após isso, faz o redirecionamento para a nova url criada
 *
 * @access protected
 * @return void
 */
	protected function _redirectToNamedUrl() {
		$query_strings = $this->request->data['Filter'];
		$this->request->data['Filter'] = Sanitize::clean($this->request->data['Filter']);
		if (!empty($query_strings)) {
			$query_strings = array_merge($this->params['named'], $query_strings);
			$this->redirect($query_strings, null, true);
		}
	}
	
	
	protected function _sendMailNotification($to, $subject, $tmpl, $body = null)
	{
		$email = new CakeEmail();
		$email->config('gmail');
		$email->to($to);
		$email->subject($subject);
		$email->emailFormat('html');
		$email->viewVars($this->viewVars);
		
		//$email->to($to)->subject($assunto)->emailFormat('html')->viewVars($this->viewVars);
	
		if($body !== null)
			$email->body($body);
		else
			$email->template($tmpl);
	
		return $email->send();
	}
}
